package com.dmp.storm.bolt;

import com.dmp.common.string.StringUtils;
import com.dmp.util.Constant.adRedisKey;
import com.dmp.util.JedisReadUtils;
import com.dmp.util.JedisWriteUtils;

import java.util.Map;

/** 
 * @ClassName RRBolt
 * @Description 
 *
 * @author  sunzy 
 * @date 2016年8月5日 下午5:14:50 
 * @version 1.0 
 *
 */
public class RRBolt extends BaseMapBolt {

	/**
	 * 
	 */
	private static final long serialVersionUID = 3986454562905616895L;
	private Map billMap;
	private String dayFieldKey;
	private String rrFieldKey;
	private String type;
	
	@Override
	public void prepare() {

		JedisWriteUtils.setJedisPool("greenet.properties");
		JedisReadUtils.setJedisPool("greenet.properties");
	}
	
	public  Map<String, Object> process(Map<String, Object> map) {
		billMap = map;
		
		//根据uuid和曝光类型排重
		boolean reFlag = this.checkRR();
		
		if(!reFlag){
			this.repet(map);
			return null;
		}else{
			//入库实现
			this.insertRedis();
		}
		
		return map;
	}
	
	

	/** 
	  * @author  sunzy
	  * @date 2016年4月27日 下午7:54:08 
	  * @Description 判断是否重复
	  *
	  * @param day
	  * @param rr
	  * @return  返回true说明没有重复，   反之false代表已重复
	  * @return  boolean
	  */
	private boolean checkRR() {
		String key = getKey();
		String field = getFieldKey();
		
		//字段不允许为空
		if(StringUtils.isBlank(key ) || StringUtils.isBlank(field) )
			return false;
		
		return JedisReadUtils.getStringForMap(key, field) == null ? true : false;
	}

	/** 
	  * @author  sunzy
	  * @date 2016年5月20日 上午11:57:33 
	  * @Description 获取key
	  *
	  * @return
	  * @return  String
	  */
	private String getKey(){
		String dayFieldValue = (String)this.billMap.get(this.dayFieldKey);
		return adRedisKey.AD_BILL_DAY_RR_KEY + "-" + dayFieldValue;
	}

	/** 
	  * @author  sunzy
	  * @date 2016年5月20日 上午11:58:00 
	  * @Description 获取fieldkey
	  *
	  * @return
	  * @return  String
	  */
	private String getFieldKey(){
		String rrFieldValue = (String)this.billMap.get(this.rrFieldKey) + "-" + this.type;
		return rrFieldValue;
	}
	/** 
	  * @author  sunzy
	  * @date 2016年4月7日 上午10:13:17 
	  * @Description 重复数据处理
	  *
	  * @param map
	  * @return  void
	  */
	private void repet(Map<String, Object> map){
		
	}
	
	/** 
	  * @author  sunzy
	  * @date 2016年4月7日 上午10:13:46 
	  * @Description 将新key更新到排重数据
	  *
	  * @param map
	  * @return  void
	  */
	private void insertRedis() {
		String key = getKey();
		String field = getFieldKey();
		
		//字段不允许为空
		if(StringUtils.isBlank(key ) || StringUtils.isBlank(field) )
			return ;
		
		JedisWriteUtils.hincrBy(key, field, 1);
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}
	
	
}
